﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSemanticAnalyser
{
    using daBase.Objects;
    using daBase.Objects.AnalysisErrors;
    using daBase.Analyser;
    using daSyntaxAnalyser.SyntaxTree;
    using SemanticTree;

    /// <summary>
    /// Контроллер семантического анализа
    /// </summary>
    public class SemanticAnalyserController : BaseAnalysisController
    {
        // шаблон "одиночка"
        private static SemanticAnalyserController instance;

        /// <summary>
        /// Единственный экземпляр класса контроллера
        /// </summary>
        public static SemanticAnalyserController Instance
        {
            get
            {
                if (instance == null)
                    instance = new SemanticAnalyserController();
                return instance;
            }
        }

        /// <summary>
        /// Трансляция списка деревьев
        /// </summary>
        /// <param name="Roots">список корней синтаксических деревьев</param>
        /// <returns>список корней мета-моделей</returns>
        public List<FileSemanticElement> Translate(List<FileElement> Roots)
        {
            List<FileSemanticElement> roots = new List<FileSemanticElement>();
            foreach (FileElement root in Roots)
                roots.Add(SemanticAnalyser.Instance.Translate(root));
            return roots;
        }

        /// <summary>
        /// Конструктор
        /// </summary>
        public SemanticAnalyserController()
        {
            SemanticAnalyser.Instance.ErrorOccuredEvent += new EventHandler<ErrorArgs>(ErrorOccured);
        }
    }
}
